package br.unicamp.ic.sgct.client.apresentacao.ucs;

import java.util.ArrayList;
import java.util.List;

import org.gwtiger.client.screen.BaseScreen;
import org.gwtiger.client.widget.field.PasswordFieldWidget;
import org.gwtiger.client.widget.field.TextFieldWidget;

import br.unicamp.ic.sgct.client.en_US;
import br.unicamp.ic.sgct.client.aplicacao.ucs.cancelamento.CancelamentoListener;
import br.unicamp.ic.sgct.client.apresentacao.widgets.ButtonCampoForm;
import br.unicamp.ic.sgct.client.apresentacao.widgets.MensagemUI;
import br.unicamp.ic.sgct.client.dominio.exception.InfraException;
import br.unicamp.ic.sgct.client.dominio.to.InscricaoTO;
import br.unicamp.ic.sgct.client.dominio.to.PessoaTO;
import br.unicamp.ic.sgct.client.dominio.to.SessaoTO;
import br.unicamp.ic.sgct.client.dominio.to.UsuarioTO;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class CancelamentoScreen extends BaseScreen {
	//INICIO EXERC.7
	// Instanciacao das classes de internacionalizacao
	
	// pt_BR pt_BRConstantes = (pt_BR) GWT.create(pt_BR.class);
	en_US Constantes = (en_US) GWT.create(en_US.class);
	private final String MSG_REQUIRED_ERR = Constantes.MSG_REQUIRED_ERR();
	// FIM EXERC.7
	
	private UsuarioTO usuario = null;
	private CancelamentoListener controladora;

/*    private StackPanel panelTabelas = new StackPanel();*/
	private FlexTable tblUsuario = new FlexTable();

	//dados usuario
	private TextFieldWidget txtbEmail = null;
	private PasswordFieldWidget txtbSenha = null;
	
	private Grid gridInscricao;
	VerticalPanel panelGeral = new VerticalPanel();
	private List<InscricaoTO> inscricoesUsuario;
    private List<InscricaoTO> inscricoesSelecionadas = new ArrayList<InscricaoTO>();
	ButtonCampoForm btnConfirmar = new ButtonCampoForm("<i>" + Constantes.confirmarCancelamento() + "</i>");
	ButtonCampoForm btnLimpar = new ButtonCampoForm("<i>" + Constantes.limparDados() + "</i>");

	/*private ValidatePanel panelValidate = new ValidatePanel();*/	

	/**
	 * 
	 * @param usuario
	 * @param controladora
	 */
	public CancelamentoScreen(UsuarioTO usuario, final CancelamentoListener controladora) {
		super();
		this.controladora = controladora;
		this.controladora.setBaseScreen(this);
		this.usuario = usuario;
		
/*		ScrollPanel panelScroll = new ScrollPanel();
		panelScroll.setAlwaysShowScrollBars(true);*/		

		panelGeral.setWidth("100%");
		panelGeral.setSpacing(10);
        panelGeral.add( controladora.getMensagemWidget() );
/*        panelGeral.add(panelTabelas);
	
        panelTabelas.setWidth("100%");*/
        txtbEmail = new TextFieldWidget(Constantes.email());
        txtbEmail.setRequired(true);
        /*txtbEmail.setFocus(true);*/ //TODO: recompilar lib      
        tblUsuario.setWidget(0, 0, txtbEmail);        

        txtbSenha = new PasswordFieldWidget(Constantes.senha());
        txtbSenha.setRequired(true);
        tblUsuario.setWidget(1, 0, txtbSenha);
	
		tblUsuario.setCellSpacing(05);
		tblUsuario.setCellPadding(05);
/*		panelTabelas.add(tblUsuario, "Cancelamento de inscri\u00e7\u00e3o");*/
		
		//INICIO EXERC.5
		ButtonCampoForm btnProcurar = new ButtonCampoForm("<i>" + Constantes.procurarUsuario() + "</i>");
		//FIM EXERC.5

	
        HorizontalPanel panelBtn = new HorizontalPanel();
        //INICIO EXERC.5
        panelBtn.add(btnProcurar);
        //FIM EXERC.5
        panelBtn.add(btnConfirmar);
        panelBtn.add(btnLimpar);
        panelBtn.setSpacing(6);

        panelGeral.add(tblUsuario);

        panelGeral.add(panelBtn);

        panelGeral.setCellWidth(panelBtn, "100%");

        String width  = String.valueOf( panelGeral.getOffsetWidth() + 5);
		String height = String.valueOf( panelGeral.getOffsetHeight() + 5);
/*		panelScroll.setSize(width + "px", height + "px");
		panelScroll.add(panelGeral);
*/	
		//INICIO EXERC. 5
		//Acao procurar
		btnProcurar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				procurar();	
            }
        });
		//FIM EXERC. 5
		
		//Acao cancelar
		btnConfirmar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				cancelar();
            }
        });
			
	
		btnLimpar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				txtbSenha.clear();
				txtbEmail.clear();

				if ( controladora.getMensagemWidget() instanceof MensagemUI ) {
					controladora.getMensagemWidget().setMensagemSucesso("");
					controladora.getMensagemWidget().setMensagemErro("");
					controladora.getMensagemWidget().setVisible(false);
				}
			}
        });
			
	///*		txtbConfirmacao.addKeyUpHandler(new KeyUpHandler() {
	//			public void onKeyUp(KeyUpEvent event) {
	//				txtbNome.setFocus(true);
	//			}
	//		});
	//
	//		txtbConfirmacao.addKeyPressHandler(new KeyPressHandler() {
	//			public void onKeyPress(KeyPressEvent event) {
	//				if (event.isControlKeyDown())
	//					txtbNome.setFocus(true);
	//			}
	//		});
	//*/

		this.initWidget(panelGeral);

	}
	
	@SuppressWarnings("deprecation")
	protected void montarGridSessoes(List<InscricaoTO> inscsel) {
		List<InscricaoTO> inscricoes = inscsel;
		
		if (inscricoes != null){
			btnConfirmar.setEnabled(true);
			gridInscricao = new Grid(inscricoes.size(), 1);
			gridInscricao.setBorderWidth(0);
			gridInscricao.setCellSpacing(4);
			gridInscricao.setCellPadding(6);
			gridInscricao.setTitle("Sess\u00e7es");
			
			int i = 0;
			for (final InscricaoTO inscricao : inscricoes){
				SessaoTO sessao = new SessaoTO();
				sessao = inscricao.getSessao();
				
				CheckBox cb = new CheckBox(sessao.getTema());
		    	cb.addClickListener(new ClickListener() {
					public void onClick(Widget sender) {
	                  if (((CheckBox) sender).isChecked()){
	                	  inscricao.setSituacao(3);
	                	 // inscricoesSelecionadas.add(inscricao);
	                  }
	                  else{
	                	  inscricao.setSituacao(1);
	                	 // inscricoesSelecionadas.remove(inscricao);
	                  }
					}
		    	});
				gridInscricao.setWidget(i, 0, cb);
				i++;
			}
			panelGeral.add(gridInscricao);	
		}
		else {
			btnConfirmar.setEnabled(false);
			controladora.setMensagemErro("Usuario sem inscric\u00e3o.");
		}
	}

	/*
	 * Direciona para o servidor processamento dos dados coletados
	 */
	//INICIO EXERC.5
	private boolean cancelar() {

		this.controladora.cancelar(usuario);

        return true;
	}
	//FIM EXERC.5
	
	//INICIO EXERC.5
	public void setUsuarioTO(UsuarioTO usuario){
		this.usuario = usuario;
		inscricoesUsuario = this.usuario.getInscricao();
		montarGridSessoes(inscricoesUsuario);
	}
	
	// public UsuarioTO procurar(){
	public void procurar(){
	    boolean valid = true;
		
		valid = txtbSenha.validate();
		valid = txtbEmail.validate() && valid;

		if (!valid) {
			this.controladora.getMensagemWidget().setMensagemErro(MSG_REQUIRED_ERR);			
		}
        else {
        	this.usuario.setEmail(txtbEmail.getText());
        	this.usuario.setSenha(txtbSenha.getText());

			PessoaTO pessoa = new PessoaTO();
			pessoa.setNome("");
			pessoa.setSobreNome("");
			pessoa.setFoneResidencial("");
			pessoa.setCelular("");

			this.usuario.setPessoa(pessoa);
			try{
			   this.controladora.procurar(this.usuario);
			}
			catch (InfraException e) {
				this.controladora.setMensagemErro( e.getMessage() );
				e.printStackTrace();
            }
			catch (Exception e){
				this.controladora.setMensagemErro( e.getMessage() );
				e.printStackTrace();
			}
	     }
	}
	
}